package Veterinaria.servlets;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.text.html.HTMLDocument.Iterator;

import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.*;
import org.apache.commons.io.FilenameUtils;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import Veterinaria.excepcion.CodigoDuplicadoExcepcion;
import Veterinaria.excepcion.DAOExcepcion;
import Veterinaria.excepcion.ValidaNombreExcepcion;
import Veterinaria.modelo.Dueno;
import Veterinaria.modelo.Paciente;
import Veterinaria.negocio.GestionPaciente;
import Veterinaria.negocio.GestionPersona;

import java.io.*;
import java.util.*;

/**
 * Servlet implementation class PacienteServlets
 */
@WebServlet("/PacienteServlets")
public class PacienteServlets extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * Default constructor.
	 */
	public PacienteServlets() {
		// TODO Auto-generated constructor stub
		super();
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		PrintWriter out = response.getWriter();
		response.setContentType("text/html");
		response.setHeader("Cache-control", "no-cache, no-store");
		response.setHeader("Pragma", "no-cache");
		response.setHeader("Expires", "-1");

		JSONArray arrayObj = new JSONArray();
		JSONObject obj1 = new JSONObject();
		GestionPersona dueno = new GestionPersona();
		String nom = null;

		try {
			String query = request.getParameter("term");
			query = query.toLowerCase();

			Collection<Dueno> duenos = dueno.ListaDuenoXNombre(query);

			for (Dueno due : duenos) {
				if (due.getApellido_persona().toLowerCase().startsWith(query))
					nom = due.getApellido_persona() + " "
							+ due.getNombre_persona();
				obj1.put("label", nom);
				obj1.put("value", nom);
				obj1.put("id", due.getCodigo_persona());
				arrayObj.add(obj1.toString());
				obj1.clear();
			}

		} catch (DAOExcepcion e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			out.println(arrayObj);
			out.close();
		}

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String archivo = null;
		Map<String, String> parameterMap = new HashMap<String, String>();
		// String x = request.getParameter("txtAccion");
		File pathUpload = null;
		String x = null;
		String ruta = null;
		try {
			List<FileItem> items = new ServletFileUpload(
					new DiskFileItemFactory()).parseRequest(request);

			DiskFileItemFactory factory = new DiskFileItemFactory();
			factory.setSizeThreshold(2000);
			ServletFileUpload fu = new ServletFileUpload(factory);

			java.util.List lista = fu.parseRequest(request);

			for (FileItem item : items) {
				if (item != null) {
					if (item.isFormField()) {
						// Process regular form field (input
						// type="text|radio|checkbox|etc", select, etc).
						// String fieldname = item.getFieldName();
						// String fieldvalue = item.getString();
						parameterMap.put(item.getFieldName(), item.getString());
						System.out.println("form field");
						// ... (do your job here)
					} else {
						// Process form file field (input type="file").
						String fieldname = item.getFieldName();
						String filename = FilenameUtils.getName(item.getName());
						archivo = filename;
						InputStream filecontent = item.getInputStream();
						// ... (do your job here)
						String contentType = item.getContentType();	
						x = parameterMap.get("txtAccion");
						if (x.equals("INSERTAR")) {
							
							GestionPaciente paciente = new GestionPaciente();
							Paciente codigo = null;
							try {
								codigo = paciente.GenerarCodigo();
							} catch (DAOExcepcion e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
							
							
							File directorio = new File(getServletContext().getContextPath());
						
								pathUpload = new File("D:/UPC/Programas/eclipse_indigo_64_svn_android/Workspace/ThunderBolt/WebContent/img_pet" + "/"
										+ codigo.getCodigo_paciente() + ".jpg");
								
								ruta = "img_pet/" + codigo.getCodigo_paciente() + ".jpg";
								
						

							item.write(pathUpload);
							System.out.println("Upload; ruta: " + pathUpload);
						}
					}
				}

			}
		} catch (FileUploadException e) {
			throw new ServletException("Cannot parse multipart request.", e);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		x = parameterMap.get("txtAccion");
		if (x.equals("INSERTAR")) {
			GestionPaciente paciente = new GestionPaciente();
			String txtIddueno = parameterMap.get("txtIddueno");
			String txtNombre = parameterMap.get("txtNombre");
			String txtRaza = parameterMap.get("txtRaza");
			String txtGenero = parameterMap.get("selGenero");
			String selTipoSangre = parameterMap.get("selTipoSangre");
			String txtTamano = parameterMap.get("txtTamano");
			String txtActividad = parameterMap.get("txtActividad");
			String txtPeso = parameterMap.get("txtPeso");
			String txtEsteril = parameterMap.get("selEsteril");
			String txtFecNac = parameterMap.get("txtFecNac");
			String txtNotas = parameterMap.get("txtNotas");
			// String txtImagen = request.getParameter("txtImagen");
			// String txtImagen = "" + pathUpload;
			String txtImagen = ruta;
			System.out.println(txtImagen);
			Paciente codigo = null;
			try {
				codigo = paciente.GenerarCodigo();
			} catch (DAOExcepcion e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			try {

				paciente.insertar(codigo.getCodigo_paciente(), txtIddueno,
						txtNombre, txtRaza, txtGenero, selTipoSangre,
						txtTamano, txtActividad, txtPeso, txtEsteril,
						txtFecNac, txtNotas, txtImagen, "1");

			} catch (DAOExcepcion e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				request.setAttribute("Mensaje", e);
			} catch (CodigoDuplicadoExcepcion e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				request.setAttribute("Mensaje", e);
			} catch (ValidaNombreExcepcion e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				request.setAttribute("Mensaje", e);
			}
			RequestDispatcher rd = request.getRequestDispatcher("paciente.jsp");
			rd.forward(request, response);	

		} else if (x.equals("MODIFICAR")) {
			GestionPaciente paciente_mod = new GestionPaciente();

			String codigo_paciente = parameterMap.get("txtIdpaciente");
			String nombre = parameterMap.get("txtNombre");
			String raza = parameterMap.get("txtRaza");
			String genero = parameterMap.get("selGenero");
			String tiposangre = parameterMap.get("selTipoSangre");
			String tamano = parameterMap.get("txtTamano");
			String actividad = parameterMap.get("txtActividad");
			String peso = parameterMap.get("txtPeso");
			String esteril = parameterMap.get("selEsteril");
			String fecnac = parameterMap.get("txtFecNac");
			String notas = parameterMap.get("txtNotas");
			String imagen = parameterMap.get("txtImagen");
			String estado = "1";
			try {

				paciente_mod.actualizar(codigo_paciente, nombre, raza, genero,
						tiposangre, tamano, actividad, peso, esteril, fecnac,
						notas, imagen, estado);
			} catch (DAOExcepcion e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				request.setAttribute("Mensaje", e);
				
			}
			RequestDispatcher rd = request.getRequestDispatcher("modificar_paciente.jsp");
			rd.forward(request, response);	
		} else if (x.equals("ELIMINAR")) {

			GestionPaciente paciente_eli = new GestionPaciente();

			String idpac = parameterMap.get("txtIdpaciente");

			try {
				paciente_eli.eliminar(idpac);
			} catch (DAOExcepcion e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			RequestDispatcher rd = request.getRequestDispatcher("eliminar_paciente.jsp");
			rd.forward(request, response);
		}

	}

}
